package models

import (
	"golanger.com/utils"
	"jk/jklog"
)

const (
	dbname = "db"
)

type JKInviteInfo struct {
}

type JKInviteItem struct {
	FirstInviteTime, LastInviteTime int64
	Ip                              string
	UserAgent                       string
	Index                           int // which index you visits
	InIndex                         int // how many times yourself invite
}

var (
	jkInviteCol = utils.M{
		"name": "invites",
	}
)

func NewInvite() *JKInviteInfo {
	return &JKInviteInfo{}
}

func (invite *JKInviteInfo) JKGetInvites(query interface{}, m interface{}) error {
	if err := JKGetCollection(dbname, jkInviteCol).Find(query).Sort("-firstinvitetime").All(m); err != nil {
		jklog.L().Errorln("Get Items Error")
		return err
	}
	return nil
}

func (invite *JKInviteInfo) JKInviteInsert(item interface{}) error {
	if err := JKGetCollection(dbname, jkInviteCol).Insert(item); err != nil {
		return err
	}
	return nil
}
func (invite *JKInviteInfo) JKInviteUpdate(item interface{}, update interface{}) error {
	change := utils.M{
		"$set": update,
	}
	return JKGetCollection(dbname, jkInviteCol).Update(item, change)
}

func (invite *JKInviteInfo) JKInviteRemove(item interface{}) error {
	if err := JKGetCollection(dbname, jkInviteCol).Remove(item); err != nil {
		return err
	}
	return nil
}

func (invite *JKInviteInfo) JKInviteCounts() int {
	n, _ := JKGetCollection(dbname, jkInviteCol).Find(nil).Count()
	return n
}

func (invite *JKInviteInfo) JKInviteExist(query interface{}) bool {
	n, err := JKGetCollection(dbname, jkInviteCol).Find(query).Count()
	if err != nil {
		jklog.L().Errorln("query fail ", err)
		return true
	}
	if n == 0 {
		return false
	} else {
		return true
	}
}

func (invite *JKInviteInfo) JKInviteQuery(query interface{}, save interface{}) error {
	if err := JKGetCollection(dbname, jkInviteCol).Find(query).One(save); err != nil {
		return err
	}
	return nil
}
